package com.study.hot.jetpack.paging.paging3

import androidx.paging.PagingSource
import androidx.paging.PagingState
import java.lang.Exception

/**
 * <pre>
 *     author : slx
 *     time   : 2021/02/02
 *     desc   : 定义数据源，两个泛型表示 传入Int类型页码，返回接口返回的实体类型
 *     如果使用Java需要继承对应的PagingSource如RxPagingSource或ListenableFuturePagingSource。
 * </pre>
 */
class DataSource : PagingSource<Int, DemoReqData.DataBean.DatasBean>() {

    // 主要的请求方法在该方法实现
    override suspend fun load(params: LoadParams<Int>): LoadResult<Int, DemoReqData.DataBean.DatasBean> {
        return try {
            // 当前请求页码
            var currentPage = params.key ?: 1
            var demoReqData = DataRespority().loadData(currentPage)
            // 如果当前页码数小于总页码数，表示还有下一页
            var nextPage = if (currentPage < demoReqData?.data?.pageCount ?: 0) {
                currentPage + 1
            } else {
                // 没有更多数据了
                null
            }
            if (demoReqData != null) {
                LoadResult.Page(data = demoReqData.data.datas, prevKey = null, nextKey = nextPage)
            } else {
                LoadResult.Error(throwable = Throwable())
            }
        } catch (e: Exception) {
            LoadResult.Error(throwable = Throwable(e))
        }
    }

    override fun getRefreshKey(state: PagingState<Int, DemoReqData.DataBean.DatasBean>): Int? {
        return 0
    }
}